// webpakc plugin 必须是方法或者apply方法的对象
module.exports = class MyPlugin {
  // 参数就是编译器
  apply(compiler) {
    // emit 事件是 webpack 在将资源传递给输出目录之前执行写入操作的时候触发的事件
    // hooks 是webpak提供给不同阶段处理编译产物的能力
    // tap 钩子上挂在任务   任务名  ,任务内容
    compiler.hooks.emit.tap('MyPlugin', compilation => {
      // compilation 是打包上下文,可以访问编译产物
      for (let name in compilation.assets) {
        // console.log(name);
        // console.log(compilation.assets[name].source());
        if (name.endsWith('.js')) {
          const contents = compilation.assets[name].source();
          const withoutComments = contents.replace(/\/\/.*|\/\*[\s\S]*?\*\//g, '');
          compilation.assets[name] = {
            source: () => withoutComments,
            size: withoutComments.length
          }
        }
      }
    });
  }
}